Computers, once thought to be the lone province of hobbyists and governments, have become an integral part of many people's lives. With the advent of friendly user interfaces, ample memory, high-speed processors, and network technologies, many everyday tasks can be accomplished much more easily via a computer. Indeed, for some tasks a computer is mandatory. Despite the increasing prevalence of computer use, the user interface aspects of many computer systems are not well suited to certain classes of users. For example, visually impaired users may have great difficulty seeing a computer screen. Even for users that can use a keyboard by touch alone, the inability to see the computer screen can preclude most computer-oriented activities such as network “surfing,” document formatting, graphics work, and so on.
In the past, a number of schemes have been devised to accommodate visually impaired computer users and hence to increase the accessibility of computers in general. These schemes utilize one of an assortment of techniques to magnify the material presented on the screen, either as a whole, or for a specific application. In general, it has been undesirable for application designers to incorporate significant magnification capability into the applications themselves since this imposes a separate overhead on each application and increases the complexity of the user experience. Rather, the techniques used to date have focused on intercepting downstream display data and transforming it prior to display. Two such techniques can be generally referred to as screen reading and GDI (or DDI) hooking.
In the screen reading method, a magnification application reads the relevant portion of the material rendered on the screen. Next, the magnification application magnifies the material and overlays it on the screen. There are several problems with this approach. First, since the magnification application accesses only the final screen output, there is insufficient information to perform the magnification precisely. Instead, various forms of pixel-based magnification, such as stretch blt-ing, are performed. These techniques often result in a visible lack of clarity and a generally low level of image quality in the magnified image. In addition, since this technique requires that one portion of the screen be read to produce another (the magnification window), the magnified content cannot obscure the associated unmagnified material. This precludes full screen magnification on a single screen using this technique.
The hooking techniques (GDI or DDI hooking) generally involve splicing the magnification application into the display path so that calls between display path entities, such as a graphics device interface and a driver, are intercepted and processed (such as by magnification) prior to being passed along to the intended recipient entity to be rendered or otherwise output. The hooking techniques are subject to great instability and frequent incompatibility, and provide compromised quality even when functioning as intended. The inability of these techniques to consistently provide high quality magnification stems from the fact that the information used by the magnification application is generally too refined. For example, if an application issues a command to the GDI to draw a vector shape, the image information will generally appear in raster form after processing by the GDI. Due to this loss of information within the GDI component, magnification of the GDI output will generally not have optimum quality.